package Talk;
/*
        分析该聊天程序
        1.我需要发送搭建流，并且我需要告诉我自己的终端
        2.我要发送消息给服务器
        3.同时我需要得到服务器给我的消息，并且打印出来
        4.关流
        5.我要抛异常
 */
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.util.Scanner;

public class ChatGameClient {
    private Socket socket;
    private DataInputStream in;
    private DataOutputStream out;


    public ChatGameClient() throws IOException {//构造器
        socket = new Socket("localhost", 8888);
        in = new DataInputStream(socket.getInputStream());
        out = new DataOutputStream(socket.getOutputStream());
        try {
            //关键字
            System.out.println("连接到服务器。");
            new Thread(() -> {
                try {
                    while (true) {
                        //读信息让后马上打印服务器传来的消息
                        String message = in.readUTF();
                        System.out.println(message);
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }).start();
            // 写信息给文件
            Scanner scanner = new Scanner(System.in);
            while (true) {
                String input = scanner.nextLine();//从输入源（通常是控制台或文件等）读取一行文本，并将其作为字符串返回
                out.writeUTF(input);//传给服务器
            }
        } catch (IOException e) {
            e.printStackTrace();//追踪堆栈的异常信息
        } finally {
            try {
                if (in!= null) {//in 在没有被初始化的时候是null
                    in.close();
                }
                if (out!= null) {
                    out.close();
                }
                if (socket!= null) {
                    socket.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) throws IOException {
        new ChatGameClient();
    }
}
